home *** CD-ROM | disk | FTP | other *** search
/ ShareWare OnLine 2 / ShareWare OnLine Volume 2 (CMS Software)(1993).iso / prog / rukq10.zip / RUCKMIDI.BI < prev    next >
Text File  |  1993-02-15  |  7KB  |  180 lines

  1. 'RUCKMIDI.BI 31-Jan-93 BETA 0.51 ------------------
  2. 'BETA NOT FOR PUBLIC RELEASE
  3. 'Do not distribute this release
  4. 'Do not create programs for distribution with this release
  5.  
  6. DECLARE FUNCTION RUCKMIDI% (SEG packinfo AS ANY)
  7.  
  8. CONST SysInfoMidi = 0, InitMidi = 1, ExitMidi = 2, AtExitMidi = 3
  9. CONST LoadMidi = 4, PlayMidi = 5
  10. CONST EndMidi = 8, PauseMidi = 9
  11. CONST DeallocMidi = 10, FastFwdMidi = 11, OutMsgMidi = 12
  12.  
  13. CONST SetAllMidi = 20, SetVolumeMidi = 21, SetToneMidi = 22
  14. CONST SetPatchMidi = 23, SetChMaskMidi = 24
  15.  
  16. CONST SetAllFMSBP = 30
  17.  
  18. TYPE DeallocMidiPackTYPE        'DMP
  19.  Func       AS INTEGER
  20.  stat       AS INTEGER
  21.  HandSeg    AS INTEGER          'RUCKUS allocates DOS segment (para)
  22.  TypeFlag   AS INTEGER          '0=DOS para (must=0)
  23. END TYPE '8
  24.  
  25. TYPE FastFwdMidiPackTYPE        'FFMP
  26.  Func       AS INTEGER
  27.  stat       AS INTEGER
  28.  TickCount  AS LONG             'tick count to fast forward to
  29. end type '8
  30.  
  31. TYPE GetMidiDataPackTYPE        'GDP
  32.  Func       AS INTEGER
  33.  stat       AS INTEGER
  34.  BytePos    AS LONG             'current byte relative base ptr (27)
  35. END TYPE '8
  36.  
  37. TYPE mInitMidiPackTYPE          'MIMP (can't use IMP with BASIC)
  38.  Func       AS INTEGER
  39.  stat       AS INTEGER
  40.  DeviceID   AS INTEGER          '0=AdLib melodic, 1=AdLib percussive
  41.  IOport     AS INTEGER
  42.  PercCh     AS INTEGER
  43.  ChMask     AS INTEGER
  44.  Flags      AS INTEGER          '(see source)
  45.  InfoPtrOff AS INTEGER          'ret:far ptr to Midi info
  46.  InfoPtrSeg AS INTEGER
  47.  MidiExitPtrOff AS INTEGER      'ret:far ptr to Midi's ExitXB routine
  48.  MidiExitPtrSeg AS INTEGER
  49. END TYPE '22
  50.  
  51. TYPE LoadMidiPackTYPE           'LMP
  52.  Func       AS INTEGER
  53.  stat       AS INTEGER
  54.  FilenamePtrOff AS INTEGER      'far ptr to filenameZ to load
  55.  FilenamePtrSeg AS INTEGER
  56.  StartPos   AS LONG             'offset into file to start load at
  57.  LoadSize   AS LONG             'number of bytes to load (or 0 for autosize)
  58.  LoadPtrOff AS INTEGER          'ret:DOS seg:offset (offset always 0)
  59.  LoadPtrSeg AS INTEGER
  60. END TYPE '20
  61.  
  62. TYPE OutMsgMidiPackTYPE         'OMMP
  63.  Func       AS INTEGER
  64.  stat       AS INTEGER
  65.  Mstatus    AS INTEGER          'status byte (8n, 9n...)
  66.  Mdata      AS INTEGER          'data
  67. END TYPE '8
  68.  
  69. TYPE PlaybackMidiPackTYPE       'PMBP
  70.  Func       AS INTEGER
  71.  stat       AS INTEGER
  72.  Mode       AS INTEGER          'playback mode (0=interrupt FG,1=BG)
  73.  LoadPtrOff AS INTEGER          'seg:off to start of data to play
  74.  LoadPtrSeg AS INTEGER
  75. END TYPE '10
  76.  
  77. TYPE PauseMidiPackTYPE          'PMP
  78.  Func       AS INTEGER
  79.  stat       AS INTEGER
  80.  Pause      AS INTEGER          '0=unpause else pause
  81. END TYPE '6
  82.  
  83. TYPE SetFMProPackTYPE           'SFMPP (FM mixer control for SB PRO-compatibles)
  84.  Func       AS INTEGER
  85.  stat       AS INTEGER
  86.  IOport     AS INTEGER          'base I/O port (&H220, &H240)
  87.  MasterVol  AS INTEGER          '0F0F (low=right ch, high=left,-1 no change)
  88.  Steer      AS INTEGER          '0=none,1=left,2=right,3=mute,-1 no change)
  89.  FMVol      AS INTEGER          '0F0F (low=right,high=left,cannot skip)
  90. END TYPE '12
  91.  
  92. TYPE SetMidiPackTYPE            'SMP
  93.  Func       AS INTEGER
  94.  stat       AS INTEGER
  95.  Channel    AS INTEGER          'channel to set (bit mask of channels 0-15)
  96.  Volume     AS INTEGER          'volume adjust
  97.  Tone       AS INTEGER          'tone adjust
  98.  ChMask     AS INTEGER          'if bit=0 then that channel is ignored
  99.  PatchMapID AS INTEGER          'patch map ID
  100.  PatchMapPtrOff AS INTEGER      'far ptr to alternate patch map or
  101.  PatchMapPtrSeg AS INTEGER      'address of patch map ID selected
  102. END TYPE '18
  103.  
  104. TYPE SysInfoMidiPackTYPE        'SIMP
  105.  Func       AS INTEGER          'this (or any) TYPE will be expanded as needed
  106.  stat       AS INTEGER          'to accomodate additional MIDI devices
  107.  Device0    AS INTEGER          '=1 AdLib melodic mode available
  108.  D0port     AS INTEGER          '388h
  109.  D0mask     AS INTEGER          '
  110.  Device1    AS INTEGER          '=1 AdLib percussive mode available
  111.  D1port     AS INTEGER          '388h
  112.  D1mask     AS INTEGER
  113. END TYPE '16
  114.  
  115. TYPE XitMidiPackTYPE            'XMP
  116.  Func       AS INTEGER
  117.  stat       AS INTEGER
  118. END TYPE '4
  119.  
  120. 'mid@deviceID    dw 0              ;0    ;0=AdLib melodic, 1=AdLib percussive...
  121. 'mid@flags       dw 0              ;2    ;bit0=1 use background processing
  122. '                                        ;bit1=1 disable program change event
  123. '                                        ;bit2-7 reserved (low byte used to send
  124. '                                        ;while high byte used to return info)
  125. '                                        ;bit8-13 reserved
  126. '                                        ;bit14=1 then CTMF file playing
  127. '                                        ;bit15=1 then AdLib ROL-convert
  128. 'mid@percChannel dw 0              ;4    ;<> 0 percussion channel mapped
  129. 'mid@end         dw 0              ;6    ;=1 end of MIDI (not playing)
  130. '                                  ;BPTR used for possible mid@pauseMIDI merge
  131. 'mid@memDOS      dw 0              ;8      ;DOS RAM available
  132. '
  133. '                ;following data should be zeroed before each load
  134. '
  135. 'mid@memUsed     dw 0              ;10     ;K used by last load
  136. '
  137. '                ;following data should be zeroed before each initial play
  138. '                ;from typeMIDI to chNotes
  139. '
  140. 'typeMIDI        dw 0              ;12   ;MIDI type (0 or 1)
  141. 'noTracks        dw 0              ;14   ;number of tracks
  142. 'ticksQnote      dw 0              ;16   ;ticks/quarter-note
  143. '
  144. 'uSecsQnote      dd 0              ;18   ;micro-secs/quarter-note
  145. 'tickCount       dd 0              ;22   ;current tick count
  146. '
  147. 'musicPtr        dd 0              ;26   ;seg:off->current MIDI data byte
  148. 'currTrk         dw 0              ;30   ;current MIDI track
  149. 'timeSig         DB 0,0,0,0        ;32   ;nm,dn,MIDI clocks/beat,32nd notes/beat
  150. 'chPrograms      DB 16 DUP (0)     ;36   ;channel programs
  151. 'chVolumes       DB 16 DUP (0)     ;52   ;channel volume level (0-127)
  152. 'chNotes         DB 16 DUP (0)     ;68   ;channel note values (0-127)
  153. '
  154. 'PlayClearSize = $-typeMIDI
  155. '                                        ;do not clear following
  156. 'chRelVolumes    dw 16 DUP (0)     ;84   ;-128 to +127 range (0=no change)
  157. 'chRelNotes      dw 16 DUP (0)     ;116  ;-128 to +127 range (0=no change)
  158. '                                  ;148 total
  159. 'MidiInfoSize = $-mid@deviceID
  160. '
  161. 'EVEN                            ;local info
  162. 'mid@ChMask      dw 0
  163. 'mid@init        dw 0            ;=1 then initialized
  164. 'FastFwdTo       dd 0            ;fast forward to this tick count
  165. 'FastFwdOn       DB 0            ;fast forward on flag (0=off)
  166. 'mid@pause       DB 0            ;=1 then MIDI play is paused
  167. 'enterMIDI       DB 0            ;=1 then MIDI event called externally
  168. '
  169. 'EVEN                            ;following needs to be clear before each play
  170. 'trkStats        DB 64 DUP (0)   ;current tracks' status
  171. 'trkPtrs         dw 64 DUP (0)   ;current offsets to MIDI tracks
  172. 'absTimes        dd 64 DUP (0)   ;current absolute time of MIDI tracks
  173. '
  174. 'PlayClearSize2 = $-trkStats
  175. '
  176. 'mid@CTMFInsPtr  dw 0            ;instruments ptr relative music data segment
  177. 'mid@CTMFInsCnt  dw 0            ;number of patches in file
  178. '
  179. 'END RUCKMidi.BI -----------------------
  180.